//** */ v-if和v-for同时执行的优先级问题
//1.v-for的优先级要高于v-if 在源码中我们其实可以看到 v-if v-else-if v-else被封装为一个函数 
// 在执行v-for时候作为代码实现的一个参数在v-for遍历的时候依次执行这函数来输出数据
//2.在同时执行的时候都会先执行循环在判断条件，循环无论如何都不能避免 浪费性能
//3.可以在外面嵌套templete进行v-if判断 在内部进行v-for循环
//4.如果需要在循环内部v-if的话 可以通过计算属性提前过滤掉这些不需要显示的项

//** */ vue组件data为什么必须是个函数而vue的跟实例则没有此限制
// vue组件可能存在多个实例，如果使用对象定义data则会导致公用一个data对象，那么状态的变更会影响所有组件的实例这不合理
// 采用函数定义在initData的时候会作为一个工厂函数返回全新的data对象，避免多实例间状态的污染，而vue的根实例只有一个在创建的时候不存在这个限制

//** */ vue中key的作用和原理
//1. key的作用是为了高效更新虚拟dom,原理是vue在patch过程中可以通过key精准判断两个节点是否是同一个，
// 避免了vue就地更新的策略避免频繁更新不同元素，减少了dom操作量，提高性能
//2. 避免了一些隐藏的bug，不设置key的话 如果对列表中间元素做删除操作 根据vue就地复用的原理 本身删除中间元素结果可能会变成删除了最后一个元素
// 这里详情参考https://www.zhihu.com/question/61064119
//3.相同标签元素过渡切换的时候也会用到key，不然会复用这个元素渲染元素的内容，会出现内容改变了，但是没有过渡的效果

//** */你怎么理解vue中diff算法
// 1.diff算法是虚拟dom技术下的必然产物，通过新旧虚拟dom的对比，将变化的地方更新在真实的dom上面，同时也西药diff高效的执行对比的过程
// 2.vue2.x中每一个组件只有一个watcher与之对应，只有引入diff才能精确的找到发生变化的地方
// 3.vue中diff执行的时刻是组件实例执行其更新函数时，他会对比上一次的渲染结果oldVnode和新的渲染结果newVnode，此过程称为patch
    // watcher的调用执行了更新函数，当我们修改一个数据的时候由于数据的响应式触发了set，set中触发了通知，通知会尝试将watcher添加到异步更新队列，
    // 在每次事件循环结束的时候会去清空这些队列，清空的过程中所有的watcher会尝试去执行更新函数，更新函数执行的时候会去调用组件的渲染函数和更新函数
    // 会重新渲染最新的虚拟dom
// 4.diff遵循 深度优先，同级比较，两个节点比较的时候会先判断他们是否拥有子节点或者文本节点
    //首尾进行四次比较，如果没有找到相同的节点则按照通用的方式遍历查找，查找结束后再按照情况处理剩下的节点，比如一方已经查找完，另一个还有
    //进行批量的新增或者删除等。通常我们借助key可以精确的找到相同的节点，整个patch过程非常高效

// vue组件化的理解
// 1
